# handle_excel
# 2024/10/18
# author:www
import xlrd

from utils.handle_path import data_path

'''
函数名：get_excel_data()
函数功能：
    1、获取请求的body,预期响应结果
    2、可以自定义获取对应列的数据
    3、需要获取测试用例里面指定的用例运行（回归，冒烟测试）
具体方案：
    1、导入对应的excel读取的库，xlrd处理xls格式；openpyxl处理xlsx格式；
    2、把excel中的内容读取到内存 excel对象
    3、找到需要操作的sheet表
    4、读取对应行列(单元格的数据)  
    
    用例筛选：
    3.1、全部执行
    3.2、选择某一段执行 t1~t2
    3.3、随机选择
    3.4、混合模式：['t1','t5','t7']
    
    注意：
    pytest框架只能定制化执行接口层：执行或者不执行某一个接口
    但是具体的测试用例挑选，pytest框架做不了
    pytest
'''

def get_excel_data(sheetName, case_NO,*args,excel_path=data_path+'\\h_saas_testcase.xls',selectCase='all'): # *args代表未知个数参数，传递几个就接收几个
    res_list = []
    workBook = xlrd.open_workbook(excel_path,formatting_info=True)
    workSheet = workBook.sheet_by_name(sheetName)  # 根据sheet名称查找表单
    '''
    4、参数化传递列名，获取对应列的内容（灵活获取列数据）
        方案：要想办法获取用户输入的名称在sheet表中对应的位置
    '''
    col_name_index = [] # 存放用户传递的列名称位置
    for i in args:  # 循环用户输入的列名称
        col_name_index.append(workSheet.row_values(0).index(i))  # 获取表单的第0行数据，index(i):i是用户输入的标题名称，整体是返回用户输入的列名在第0行的下标值
    print('用户想要的列字段：',col_name_index) # 输入下标值; 如：a.index(2) 返回的是列表中值为 2 的元素的索引，即 1。


    '''
    用例筛选-根据用户需求执行用例
    selectCase:['03','05-08','all']
    '''
    select_list = []  # 挑选出来的用例
    if 'all' in selectCase:
        select_list = workSheet.col_values(0)  # 如果用户想要执行这个接口的全部用例，那就把第一列的符合条件的用例编码给他
    else:
        for one in selectCase:
            if '-' in one:
                start,end = one.split('-')   # 5,8
                for i in range(int(start),int(end)+1):
                    select_list.append(case_NO+f'{i:>02}')
            else:
                select_list.append(case_NO + one)

    row_name_index = 0  # 代表起始行
    for row_no in workSheet.col_values(0): # 获取第一列的数据
        if case_NO in row_no and row_no in select_list:  # 符合条件的接口用例and用户传的用例编码
            # 用户输入的用例名称在第一列找到了，满足条件，获取列的数据
            get_col_data = []
            for col_index in col_name_index:
                cell_data = workSheet.cell_value(row_name_index,col_index)
                get_col_data.append(cell_data)
                # 列通过用户传递
            res_list.append(get_col_data) # 将
        row_name_index += 1
    return res_list




if __name__ == '__main__':
    col_names = ['用例编号','标题','请求方式']
    # result = get_excel_data('../data/h_saas_testcase.xls','login','login',*col_names,selectCase=['03','05-08'])
    # result = get_excel_data('../data/h_saas_testcase.xls', 'login', 'login', '请求参数', '响应预期结果')
    result = get_excel_data('login', 'login', '请求参数', '响应预期结果')
    for res in result:
        print(res)
        print(type(res))



